home *** CD-ROM | disk | FTP | other *** search
- /* DisplayTestResults.c */
- /*
- * DisplayTestResults.c
- * Copyright © 93 Apple Computer Inc. All Rights Reserved.
- *
- * Run the dialog until the user has had enough.
- */
- #include "SCSIAsyncSample.h"
- #include "SCSIDefinitions.h"
- #include <math.h>
- #define ALWAYS 1
- #define NEVER 1
- #define INFO (*infoPtr)
-
- void
- DisplayOneResult(
- register InfoPtr infoPtr
- );
-
- void
- DisplayTestResults(void)
- {
- InfoPtr currentInfoPtr;
-
- if (infoPtrQueue.qHead == NULL)
- DisplayLogString(gLogListHandle, "\pNo devices to test");
- for (currentInfoPtr = (InfoPtr) infoPtrQueue.qHead;
- currentInfoPtr != NULL;
- currentInfoPtr = (InfoPtr) currentInfoPtr->link) {
- DisplayOneResult(currentInfoPtr);
- }
- }
-
- void
- DisplayOneResult(
- register InfoPtr infoPtr
- )
- {
- Str255 work;
- Str255 temp;
- register short i;
- register RequestMemoryPtr requestMemoryPtr;
- UnsignedWide deltaTime;
- double overallAverageTime;
- double mean;
- double sdNumerator;
- double sdDenomenator;
- double standardDeviation;
-
- DisplayDeviceInfo(infoPtr);
- if (INFO.validDevice) {
- work[0] = 0;
- AppendPascalString(work, "\p Final status: ");
- AppendSigned(work, INFO.finalStatus);
- AppendPascalString(work, "\p. Transfers ");
- AppendUnsigned(work, INFO.transfersAttempted);
- AppendPascalString(work, "\p attempted, ");
- AppendUnsigned(work, INFO.transfersCompleted);
- AppendPascalString(work, "\p completed, ");
- AppendUnsigned(work, INFO.asynchRequests);
- AppendPascalString(work, "\p asynch");
- DisplayLogString(gLogListHandle, work);
- LogStatus(gLogListHandle, INFO.finalStatus, "\p Status error");
- /*
- * This is ugly but I have a plane to catch.
- */
- if (NEVER == FALSE) {
- for (i = 0; i < kRequestMemory; i++) {
- requestMemoryPtr = &INFO.requestMemory[i];
- if (ALWAYS || i < 10) {
- MicrosecondDelta(
- &requestMemoryPtr->startTime,
- &requestMemoryPtr->endTime,
- &deltaTime
- );
- work[0] = 0;
- AppendUnsignedInField(temp, i, 2);
- AppendPascalString(work, temp);
- AppendPascalString(work, "\p: ");
- AppendUnsignedInField(temp, requestMemoryPtr->blockNumber, 8);
- AppendPascalString(work, temp);
- AppendChar(work, ' ');
- AppendDouble(temp, MicrosecondToDouble(&deltaTime) / 1000000.0, 6);
- AppendPascalString(work, temp);
- DisplayLogString(gLogListHandle, work);
- }
- }
- }
- /*
- * Convert from microseconds to seconds.
- */
- MicrosecondDelta(
- &INFO.testStartTime,
- &INFO.testEndTime,
- &deltaTime
- );
- if (INFO.transfersCompleted > 0) {
- mean = INFO.sampleSum / (double) INFO.transfersCompleted;
- if (INFO.transfersCompleted > 1) {
- sdNumerator = INFO.sampleSumSquare
- - (INFO.sampleSum * INFO.sampleSum) / (double) INFO.transfersCompleted;
- sdDenomenator = (double) INFO.transfersCompleted - 1;
- standardDeviation = sqrt(sdNumerator / sdDenomenator);
- }
- }
- if (INFO.transfersCompleted > 0) {
- overallAverageTime = MicrosecondToDouble(&deltaTime);
- overallAverageTime /= ((double) INFO.transfersCompleted);
- overallAverageTime /= 1000000.0;
- work[0] = 0;
- AppendPascalString(work, "\p Mean ");
- AppendDouble(work, mean, 6);
- if (INFO.transfersCompleted > 1) {
- AppendPascalString(work, "\p, Standard Deviation ");
- AppendDouble(work, standardDeviation, 6);
- }
- DisplayLogString(gLogListHandle, work);
- work[0] = 0;
- AppendPascalString(work, "\p Overall average ");
- AppendDouble(work, overallAverageTime, 6);
- AppendPascalString(work, "\p, Average overhead ");
- AppendDouble(work, overallAverageTime - mean, 6);
- DisplayLogString(gLogListHandle, work);
- }
- }
- }
-
-